package main

import (
	"encoding/json"
	"fmt"
)

type student struct {
	Name  string
	Age   int `json:"age"` //如果不设置标签 则直接使用Age作为json字段名
	score int //不能序列化输出
}

type Teacher struct {
	Name  string
	Age   int    `json:"age"`
	Class string `json:"class1"`
}

//如果数据已经存在于内存中使用 marshal 方法
//如果数据来源于流 请使用encode

func main() {
	st1 := student{
		Name:  "zhangsan",
		Age:   10,
		score: 90,
	}
	marshalValue, _ := json.Marshal(st1)
	fmt.Println(string(marshalValue))

	fmt.Println("============================")
	tc1 := Teacher{
		Name:  "Mr.Li",
		Age:   20,
		Class: "class-4",
	}
	tcJson, _ := json.Marshal(tc1)
	fmt.Println(string(tcJson))
	fmt.Println("============================")

	//不能
	var tc2 = Teacher{}
	//第二个参数必须是指针 否则报错：json: Unmarshal(non-pointer main.Teacher)
	err := json.Unmarshal(tcJson, &tc2)
	if err != nil {
		fmt.Println(err)
	} else {
		fmt.Println(tc2)
	}
}
